package com.jhws.util.file;

import com.jhws.util.LogHelper;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;

public class FileUtil {
    /**
     * @param prefix - 名字全路径的前缀，用于过滤
     * @Comment: 获取给定路径下得所有文件的绝对路径的列表，存在fileName中，过滤掉子目录
     * @Param: fileName - 外面传入的List
     */
    public static void getAllFileName(String path, ArrayList<String> fileName, String prefix) {
        File file = new File(path);

        File[] files = file.listFiles();

        if (files == null) {
            LogHelper.getLogger().debug("getAllFileName null!");
            return;
        }

        for (File a : files) {
            if (a.isDirectory()) {
                getAllFileName(a.getAbsolutePath(), fileName, prefix);
            } else {
                if (prefix != null && a.getAbsolutePath().startsWith(prefix))
                    fileName.add(a.getAbsolutePath());
            }
        }
    }

    /**
     * @Comment: 判断文件是否存在
     * @Param:
     */
    public static boolean exsit(String path) {
        File file = new File(path);

        return file.exists();
    }

    /**
     * @Comment: 获取文件大小
     * @Param:
     */
    public static long getFileSpace(String path) {
        File file = new File(path);
        if (!file.exists())
            return 0;
        else
            return file.length();
    }

    public static void deleteFile(String path) {
        File file = new File(path);
        if (file.exists()) {
            file.delete();
        }
    }

    //3个月的时间
    public static long MONTHS_3 = 90L * 24L * 60L * 60L * 1000L;

    public static void deleteFileTime(String dirPath, String logDirPath, long time) {
        //把要删除的文件包装成文件
        File file = new File(dirPath);
        if (file.exists()) {   //文件或文件夹是否存在
            if (file.isDirectory()) {   //判断是否是目录
                info(file, logDirPath, time);
            }
        }
    }

    public static void info(File file, String logDirPath, long time) {
        //获得文件里面所有的文件及文件夹
        File[] files = file.listFiles();
        //创建您要写入的日志文件
        String file1 = logDirPath + "/del_file_path.txt"; //写入的是否操作
        //遍历files里面的所有文件及文件夹
        FileWriter fw = null;
        BufferedWriter bw = null;
            for (File f : files) {
                try {
                    //获得绝对路径下的文件及文件夹
                    File absFile = f.getAbsoluteFile();
                    long currTime = System.currentTimeMillis();//当前时间
                    long lastTime = absFile.lastModified();//文件被最后一次修改的时间
                    //时间差
                    long diffen = currTime - lastTime;
                    if (diffen >= time) {
                        absFile.delete();
                        long delTime = lastTime + time;   //要删除文件及文件夹的时间--毫秒数
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");//2017-5-5 23:32:23:234
                        String formatTime = sdf.format(delTime);
                        String strDel = "删除该文件的时间是：" + "\t" + formatTime + "\t" + "\t删除的文件是：" + absFile.getAbsolutePath();//absFile.getAbsolutePath()获得你要删除文件的绝对路径
                        fw = new FileWriter(file1, true);
                        bw = new BufferedWriter(fw);
                        bw.write(strDel);
                        bw.newLine(); //换行
                        bw.flush();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    try {
                        bw.close();
                        fw.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        //删除文件并记录日志方法
        //拿到要删除文件里的所有文件及文件夹
        //创建您删除文件后的日志文件
        //创建输出流
        //删除文件并记录日志
    }
}
